home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 2 / Amiga Tools 2.iso / tex / macros / source / contrib / misc / oubraces.sty < prev    next >
Text File  |  1995-03-09  |  3KB  |  93 lines

  1. % oubraces.sty: Interleave \overbrace with \underbrace
  2. %                Donald Arseneau, 1993
  3. %
  4. % \overunderbraces{upper_braces}{main_formula}{lower_braces}
  5. %
  6. % Instructions are given below, after \endinput.
  7. %
  8. %  First, set catcode of @ in case it isn't a "letter" already
  9. \expandafter\edef\csname REST@catcode\endcsname
  10.   {\catcode`\noexpand\@=\the\catcode`\@
  11.   \let \csname SREST@catcode\endcsname \noexpand\UnDefinedButNoAt}
  12. \catcode`\@=11
  13.  
  14. \def\overunderbraces #1#2#3{{%
  15.  \baselineskip\z@skip \lineskip4\p@ \lineskiplimit4\p@
  16.  \displaystyle % deliberately generate error if not in math mode!
  17. % first, do the top half of the alignment in a save-box ...
  18.  \setbox\z@\vbox{\ialign{&\hfil${}##{}$\hfil\cr
  19.    \global\let\br\br@label #1\cr % upper labels
  20.    \global\let\br\br@down #1\cr  % upper braces
  21.    #2\cr % main line of the formula
  22.  }}% finished partial alignment and \vbox.
  23.  \dimen@-\ht\z@ %   Measure height of partial alignment --
  24. % ... it is the height we want for the whole.
  25. % Now do the whole alignment (notice the repetition from above)
  26.  \setbox\z@\vbox{\ialign{&\hfil${}##{}$\hfil\cr
  27.    \global\let\br\br@label #1\cr % upper labels
  28.    \global\let\br\br@down #1\cr  % upper braces
  29.    #2\cr % main line of the formula
  30.    \global\let\br\br@up #3\cr    % lower braces
  31.    \global\let\br\br@label #3\cr % lower labels
  32.  }}% finished whole alignment and \vbox.
  33.  \advance\dimen@\ht\z@ % calc. the necessary lowering
  34.  \lower\dimen@\hbox{\box\z@}% shift to get the desired height
  35. }}
  36.  
  37. % Three aliases for \br.
  38. % #1=number of spanned columns,  #2=label
  39. \def\br@up#1#2{\multispan{#1}\upbracefill}
  40. \def\br@down#1#2{\multispan{#1}\downbracefill}
  41. \def\br@label#1#2{\multispan{#1}\hidewidth $#2$\hidewidth}
  42.  
  43. \REST@catcode
  44.  
  45. \endinput
  46. %
  47. %-----------------------------------------------------------------
  48. %
  49. % oubraces.sty: Interleave \overbrace with \underbrace
  50. %                Donald Arseneau, 1993
  51. %
  52. % The syntax is:
  53. %
  54. %   \overunderbraces{upper_braces}{main_formula}{lower_braces}
  55. %
  56. % Suppose we want the equation:
  57. %                x               y
  58. %          ,-----^-----.   ,-----^-----.
  59. %  a + b + c + d + e + f + g + h + i + j + k + l + m = \pi r^2
  60. %                  `-----v-----'
  61. %                        z
  62. % There are seven segments:
  63. %                x               y
  64. %          ,-----^-----.   ,-----^-----.
  65. %  a + b + c + d + e + f + g + h + i + j + k + l + m = \pi r^2
  66. %  11111111222222223333344455555666666667777777777...
  67. %                  `-----v-----'
  68. %                        z
  69. % Insert & between each segment (where the tips of the braces point)
  70. % to type the main_formula:
  71. %                x               y
  72. %          ,-----^-----.   ,-----^-----.
  73. %  a + b +&c + d +&e + f&+&g + h&+ i + j&+ k + l + m
  74. %                  `-----v-----'
  75. %                        z
  76. % Each brace should be specified by typing
  77. %
  78. %    \br{number_of_segments}{label},
  79. %
  80. % separated by  &  to indicate which segment to start at; and
  81. % where  & &  skips a segment that has no brace.  For our
  82. % example formula, the upper and lower brace specifiers are:
  83. %
  84. % top row:  &\br{2}{x}& &\br{2}{y}
  85. % bot row:  & &\br{3}{z}
  86. %
  87. % Now put them all together:
  88. %
  89. % \overunderbraces{&\br{2}{x}& &\br{2}{y}}%
  90. %    {a + b +&c + d +&e + f&+&g + h&+ i + j&+ k + l + m}%
  91. %    {& &\br{3}{z}}
  92. %  = \pi r^2
  93.